ИППРПО

Основы Docker

ИППРПО

1. Введение в Docker

1.1. Что такое Docker?

Docker — это платформа для разработки, развертывания и управления контейнерами. Контейнеры позволяют упаковывать приложения со всеми зависимостями в изолированные среды, что обеспечивает переносимость и согласованность работы на разных системах.

Основы Docker
ИППРПО

1.2. Зачем нужен Docker?

  • Изоляция приложений – каждое приложение работает в своем контейнере.
  • Переносимость – контейнеры работают одинаково на любом компьютере с Docker.
  • Масштабируемость – легко развертывать несколько экземпляров приложения.
  • Эффективность – контейнеры легче виртуальных машин, так как используют общее ядро ОС.
Основы Docker
ИППРПО

1.3. Основные понятия

  • Docker Image (Образ) – шаблон для создания контейнеров (например, nginx, postgres).
  • Docker Container (Контейнер) – запущенный экземпляр образа.
  • Dockerfile – текстовый файл с инструкциями для сборки образа.
  • Docker Hub – репозиторий готовых образов (аналог GitHub для Docker).
Основы Docker
ИППРПО

2. Установка Docker

2.1. Поддерживаемые платформы

  • Windows (Docker Desktop)
  • macOS (Docker Desktop)
  • Linux (Docker Engine)

2.2. Проверка установки

docker --version
docker run hello-world
Основы Docker
ИППРПО

3. Основные команды Docker

3.1. Работа с образами

  • Скачать образ:
    docker pull nginx
    
  • Просмотр списка образов:
    docker images
    
  • Удалить образ:
    docker rmi nginx
    
Основы Docker
ИППРПО

3.2. Работа с контейнерами

  • Запуск контейнера:
    docker run -d -p 80:80 --name my-nginx nginx
    
    • -d – запуск в фоне (detached mode)
    • -p 80:80 – проброс портов (хост:контейнер)
    • --name – имя контейнера
Основы Docker
ИППРПО
  • Просмотр запущенных контейнеров:
    docker ps
    
  • Остановка контейнера:
    docker stop my-nginx
    
  • Удаление контейнера:
    docker rm my-nginx
    
Основы Docker
ИППРПО

4. Создание своего образа (Dockerfile)

Синтаксис Dockerfile

Dockerfile — это текстовый файл с инструкциями для сборки Docker-образа. Каждая инструкция создает новый слой в образе.

Основы Docker
ИППРПО

Пример Dockerfile для веб-приложения

# Базовый образ
FROM node:18-alpine

# Установка рабочей директории
WORKDIR /app

# Копирование package.json и установка зависимостей
COPY package*.json ./
RUN npm install

# Копирование исходного кода
COPY . .

# Переменные окружения
ENV NODE_ENV=production
ENV PORT=3000

# Открытие порта
EXPOSE 3000

# Команда запуска
CMD ["npm", "start"]
Основы Docker
ИППРПО

4.1. Основные инструкции

4.1.1. FROM – Базовый образ

Определяет, на основе какого образа собирается контейнер.

FROM ubuntu:22.04         # Официальный образ Ubuntu
FROM python:3.9-slim      # Образ Python с Alpine Linux
FROM node:18              # Образ Node.js

4.1.2. RUN – Выполнение команд

Запускает команды внутри контейнера при сборке.

RUN apt-get update && apt-get install -y curl
RUN pip install flask
RUN npm install
Основы Docker
ИППРПО

4.1.3. COPY / ADD – Копирование файлов

  • COPY – просто копирует файлы.
  • ADD – поддерживает распаковку архивов и URL.
COPY ./app /app           # Копирует локальные файлы в контейнер
ADD https://example.com/file.tar.gz /tmp  # Скачивает и распаковывает

4.1.4. WORKDIR – Рабочая директория

Устанавливает рабочую папку для последующих команд (RUN, CMD, ENTRYPOINT).

WORKDIR /app              # Все команды будут выполняться в /app
Основы Docker
ИППРПО

4.1.5. ENV – Переменные окружения

ENV NODE_ENV=production
ENV DB_HOST=localhost

4.1.6. EXPOSE – Объявление портов

Указывает, какие порты контейнер будет слушать.

EXPOSE 80                 # HTTP
EXPOSE 443                # HTTPS
Основы Docker
ИППРПО

4.1.7. CMD / ENTRYPOINT – Запуск приложения

  • CMD – команда по умолчанию (можно переопределить при docker run).
  • ENTRYPOINT – основная команда (аргументы CMD передаются в него).
CMD ["npm", "start"]                     # Запуск npm start
ENTRYPOINT ["python", "app.py"]          # Основная команда
CMD ["--debug"]                          # Аргумент для ENTRYPOINT
Основы Docker
ИППРПО

4.2. Дополнительные инструкции

4.2.1. ARG – Аргументы сборки

Можно передавать при сборке (docker build --build-arg).

ARG APP_VERSION=1.0
ENV VERSION=$APP_VERSION

4.2.2. VOLUME – Тома (Volumes)

Создает точку монтирования для данных.

VOLUME /data              # Данные сохраняются вне контейнера
Основы Docker
ИППРПО

4.2.3. USER – Смена пользователя

USER node                 # Запуск от имени пользователя 'node'

4.2.4. HEALTHCHECK – Проверка здоровья

HEALTHCHECK --interval=5s --timeout=3s CMD curl -f http://localhost/ || exit 1
Основы Docker
ИППРПО

4.3. Сборка и запуск

docker build -t my-app .          # Сборка образа
docker run -p 3000:3000 my-app    # Запуск контейнера
Основы Docker
ИППРПО

4.4. Оптимизация Dockerfile

  • Используйте .dockerignore (чтобы не копировать ненужные файлы).
  • Объединяйте RUN-команды, чтобы уменьшить количество слоев.
  • Используйте многоэтапную сборку (multi-stage build) для уменьшения размера образа.

Пример .dockerignore:

node_modules
.git
*.log
Основы Docker
ИППРПО

Пример многоэтапной сборки:

# Этап сборки
FROM node:18 AS builder
WORKDIR /app
COPY . .
RUN npm install && npm run build

# Этап финального образа
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
Основы Docker
ИППРПО

4.5 Вывод

Dockerfile позволяет описать все шаги для создания образа. Основные инструкции:
FROM – базовый образ
RUN – выполнение команд
COPY / ADD – копирование файлов
WORKDIR – рабочая директория
CMD / ENTRYPOINT – запуск приложения

Документация: https://docs.docker.com/engine/reference/builder/

Основы Docker
ИППРПО

5. Docker Compose

Для управления несколькими контейнерами

5.1. Пример docker-compose.yml

version: '3'
services:
  web:
    build: .
    ports:
      - "3000:3000"
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example
Основы Docker
ИППРПО

5.2. Запуск

docker-compose up -d
Основы Docker
ИППРПО

6. Установка Docker на Windows

Docker на Windows позволяет запускать контейнеры прямо в вашей системе. Однако, поскольку Docker изначально разработан для Linux, в Windows он работает через WSL 2 (Windows Subsystem for Linux) или Hyper-V.

6.1. Проверка требований

  • Windows 10/11 Pro, Enterprise или Education (64-битная).
    • Для Home-версии Windows 10/11 потребуется ручная настройка WSL 2.
  • Поддержка виртуализации в BIOS (VT-x / AMD-V).
  • Минимум 4 ГБ ОЗУ (рекомендуется 8+ ГБ).
Основы Docker
ИППРПО

Как проверить поддержку виртуализации?

Откройте Диспетчер задач → вкладка "Производительность""ЦП" → пункт "Виртуализация" должен быть включен.

Если виртуализация отключена, включите её в BIOS/UEFI (обычно в разделе Advanced CPU Settings).

Основы Docker
ИППРПО

6.2. Установка Docker Desktop

6.2.1. Скачивание установщика

  1. Перейдите на официальный сайт Docker.
  2. Скачайте Docker Desktop for Windows.

6.2.2. Установка

  1. Запустите скачанный Docker Desktop Installer.exe.
  2. Следуйте инструкциям мастера установки (оставьте галочки по умолчанию).
  3. После установки нажмите "Close" и перезагрузите компьютер.
Основы Docker
ИППРПО

6.3. Настройка WSL 2 (если не установлен)

Docker Desktop использует WSL 2 для работы. Если он не установлен:

6.3.1. Включение WSL в Windows

  1. Откройте PowerShell от имени администратора и выполните:
    wsl --install
    
  2. После перезагрузки WSL 2 будет установлен автоматически.

6.3.2. Проверка версии WSL

wsl --list --verbose

Если версия WSL 1, обновите до WSL 2:

wsl --set-default-version 2
Основы Docker
ИППРПО

6.4. Запуск Docker Desktop

  1. Откройте Docker Desktop из меню "Пуск".
  2. При первом запуске появится приветственное окно – закройте его.
  3. В трее (правый нижний угол) должен появиться значок Docker (🐳).

6.4.1. Проверка работы Docker

Откройте PowerShell или CMD и выполните:

docker --version
docker run hello-world

Если видите сообщение Hello from Docker! – установка прошла успешно!

Основы Docker
ИППРПО

6.5. Возможные проблемы и решения

6.5.1. Ошибка: "Docker Desktop requires WSL 2"

  • Убедитесь, что WSL 2 включен (см. пункт 3).
  • Если Docker не видит WSL 2, попробуйте:
    wsl --update
    wsl --shutdown
    
    Затем перезапустите Docker Desktop.
Основы Docker
ИППРПО

6.5.2. Ошибка: "Hardware virtualization is disabled"

  • Включите виртуализацию в BIOS/UEFI (Intel VT-x / AMD-V).
  • В Windows:
    bcdedit /set hypervisorlaunchtype auto
    
    Затем перезагрузите ПК.

6.5.3. Docker не запускается на Windows Home

  • Установите WSL 2 вручную:
    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
    
  • Скачайте и установите ядро WSL 2.
  • Установите Linux-дистрибутив из Microsoft Store (например, Ubuntu).
Основы Docker
ИППРПО

6.6. Дополнительные настройки (опционально)

6.6.1. Изменение ресурсов Docker

  1. Откройте Docker Desktop⚙ SettingsResources.
  2. Можно изменить:
    • CPU (количество ядер)
    • RAM (ограничение памяти)
    • Диск (Disk image size)

6.6.2. Интеграция с VS Code

Установите расширение "Docker" в VS Code для удобной работы с контейнерами.

Основы Docker
ИППРПО

6.7. Запуск контейнера

Теперь Docker готов к работе на Windows!

  • Для проверки можно запустить тестовый контейнер:
    docker run -d -p 80:80 nginx
    
    Затем откройте http://localhost – должна быть страница Nginx.
Основы Docker
ИППРПО

Заключение

Docker упрощает разработку и развертывание веб-приложений, обеспечивая изоляцию и переносимость. Освоив базовые команды и Dockerfile, можно легко создавать и масштабировать приложения.

Основы Docker